<?php
namespace Org\Util\Wxpay;
use Think\Controller;
vendor('Wpay.lib.WxPay#Api');

class ErrCodeHandle extends Controller
{
    public function handle($input, $err_code){
        $result = $this->query($input);
        $data['err_code'] = $err_code;
        $data['result'] = $result;
        $data['waiting'] = 'N';
        switch($err_code){
            case 'SYSTEMERROR': //接口返回错误
                if($result['result_code'] == 'FAIL'){
                    $data['tip'] = '系统超时，请再次提交订单！';
                    $this->ajaxReturn($data);
                }
                break;
            case 'PARAM_ERROR': //参数错误
                $data['tip'] = '请严格按照格式填写参数，并重新提交订单！';
                $this->ajaxReturn($data);
                break;
            case 'ORDERPAID': //订单已支付
                if(isset($result['result_code']) == 'SUCCESS'){
                    $data['tip'] = '该订单号已支付，如是新单，请重新提交订单！';
                    $this->ajaxReturn($data);
                }
                break;
            case 'NOAUTH': //商户无权限
                $data['tip'] = '商户无权限，请联系技术人员！';
                $this->ajaxReturn($data);
                break;
            case 'AUTHCODEEXPIRE': //二维码已过期，请用户在微信上刷新后再试
                $data['tip'] = '二维码已过期，请用户在微信上刷新后再试！';
                $this->ajaxReturn($data);
                break;
            case 'NOTENOUGH': //余额不足
                $data['tip'] = '用户余额不足，请用户更换支付方式，并重新提交订单！';
                $this->ajaxReturn($data);
                break;
            case 'NOTSUPORTCARD': //不支持卡类型
                $data['tip'] = '该卡不支持当前支付，请用户更换支付方式';
                $data['waiting'] = 'Y';
                $this->ajaxReturn($data);
                break;
            case 'ORDERCLOSE': //订单已关闭
                $data['tip'] = '该订单已关闭，请重新下单支付！';
                $this->ajaxReturn($data);
                break;
            case 'ORDERREVERSED': //订单已撤销
                $data['tip'] = '订单已撤销，请重新下单支付！';
                $this->ajaxReturn($data);
                break;
            case 'BANKERROR': //银行系统异常
                if($result['result_code'] == 'FAIL'){
                    $data['tip'] = '银行系统异常，请重新下单支付！';
                    $this->ajaxReturn($data);
                }
                break;
            case 'USERPAYING': //用户支付中，需要输入密码
                sleep(5);
                $result = $this->query($input);
                $data['result'] = $result;
                if($result['result_code'] != 'SUCCESS'){
                    $data['tip'] = '请用户输入支付密码！';
                    $data['waiting'] = 'Y';
                    $this->ajaxReturn($data);
                }
                break;
            case 'AUTH_CODE_ERROR': //授权码参数错误
                $data['tip'] = '每个二维码仅限使用一次，请刷新再试';
                $this->ajaxReturn($data);
                break;
            case 'AUTH_CODE_INVALID': //授权码检验错误
                $data['tip'] = '请扫描微信支付被扫条码/二维码！';
                $this->ajaxReturn($data);
                break;
            case 'XML_FORMAT_ERROR': //XML格式错误
                $data['tip'] = 'XML格式错误，请联系技术人员！';
                $this->ajaxReturn($data);
                break;
            case 'REQUIRE_POST_METHOD': //请使用post方法
                $data['tip'] = '未使用post方法提交，请联系技术人员！';
                $this->ajaxReturn($data);
                break;
            case 'SIGNERROR': //签名错误
                $data['tip'] = '签名错误，请联系技术人员！';
                $this->ajaxReturn($data);
                break;
            case 'LACK_PARAMS': //缺少参数
                $data['tip'] = '缺少参数，请联系技术人员！';
                $this->ajaxReturn($data);
                break;
            case 'NOT_UTF8': //编码格式错误
                $data['tip'] = '编码格式错误，请联系技术人员！';
                $this->ajaxReturn($data);
                break;
            case 'BUYER_MISMATCH': //支付账号错误
                if($result['trade_type'] != 'MICROPAY'){
                    $data['tip'] = '请用户以被扫条码/二维码方式支付！';
                    $this->ajaxReturn($data);
                }
                break;
            case 'APPID_NOT_EXIST': //APPID不存在
                $data['tip'] = 'MCHID不存在，请联系技术人员！';
                $this->ajaxReturn($data);
                break;
            case 'MCHID_NOT_EXIST': //MCHID不存在
                $data['tip'] = '商户订单号重复，请联系技术人员！';
                $this->ajaxReturn($data);
                break;
            case 'OUT_TRADE_NO_USED': //商户订单号重复
                if(isset($result['transaction_id']) && $result['transaction_id'] != ''){
                    $data['tip'] = '该订单号已提交，请再次提交订单！';
                    $this->ajaxReturn($data);
                }
                break;
            case 'APPID_MCHID_NOT_MATCH': //appid和mch_id不匹配
                $data['tip'] = 'appid和mch_id不匹配，请联系技术人员！';
                $this->ajaxReturn($data);
                break;
        }
    }

    protected function query($input){
        return \WxPayApi::orderQuery($input);
    }
}